package com.laiketui.order.api.dto;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.laiketui.domain.vo.order.OrderProductsVo;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import org.springframework.format.annotation.DateTimeFormat;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

@Setter
@Getter
@ToString
public class OrderParentDTO implements Serializable {
    /**
     *
     */
    private Long id;

    /**
     * 商城id
     */
    private Integer storeId;

    /**
     * 用户id
     */
    private String userId;

    /**
     * 姓名
     */
    private String name;

    /**
     * 联系电话
     */
    private String mobile;

    /**
     * 商品总数量
     */
    private Integer num;

    /**
     * 历史总价(划线价)
     */
    private BigDecimal oldTotalPrice;

    /**
     * 总价(折扣价)
     */
    private BigDecimal totalPrice;

    /**
     * 母单号(多个同时一起支付时母单号为同一个)(支付页面通过此单号查询支付金额等信息)
     */
    private String orderParentNo;

    /**
     * 省
     */
    private String provice;

    /**
     * 市
     */
    private String city;

    /**
     * 县/区
     */
    private String area;

    /**
     * 详细地址
     */
    private String address;

    /**
     * 用户备注
     */
    private String remark;

    /**
     * 商品总体积
     */
    private BigDecimal totalVolume;

    /**
     * 当前使用的折扣率
     */
    private BigDecimal discount;

    /**
     * 订单状态 0 待确认 1 备货中 2 待发货 3 已发货 4 已退款
     */
    private Integer status;

    /**
     * 支付方式 1 结算通 2 余额支付 3 线下汇款
     */
    private Integer payType;

    /**
     * 订单过期时间
     *
      */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date expireTime;

    /**
     * 0 不开票 1 开票
     */
    private Integer invoice;

    /**
     * 扣除金额 当使用结算通/余额支付会存在不够的情况
     */
    private BigDecimal deductionAmount;

    /**
     * 线下应付金额(最终支付金额 - 扣除金额)
     */
    private BigDecimal offlinePayAmount;

    /**
     * 创建人
     */
    private String createBy;

    /**
     * 创建时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date createTime;

    /**
     * 完成时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date finishTime;

    /**
     * 下单类型1用户下单2店铺下单3平台下单
     */
    private Integer operationType;

    /**
     * 支付单号唯一标识(上游支付唯一标识)
     */
    private String payOrderNo;

    /**
     * 税费(分)
     */
    private BigDecimal taxation;

    /**
     * 最终支付金额(折扣价+ 税费)
     */
    private BigDecimal payPrice;

    /**
     * 订单类型 1 自营订单 2 pop订单(跟工厂结算)
     */
    private Integer orderType;

    /**
     * 开票单位名称
     */
    private String organization;

    /**
     * 开票纳税人识别码
     */
    private String taxpayerNumber;

    /**
     * 开票地址
     */
    private String taxAddress;

    /**
     * 开票电话
     */
    private String taxPhone;

    /**
     * 开票账户
     */
    private String taxAccount;

    /**
     * 开票银行
     */
    private String taxBank;

    /**
     * 个人开票身份证
     */
    private String taxCardNo;

    /**
     * 个人开票姓名
     */
    private String taxName;

    /**
     * 1 个人 2 企业
     */
    private Integer taxType;

    /**
     * 到货时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date arriveTime;

    /**
     * 期望发货时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date expectedDeliveryTime;

    /**
     * 实际发货时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date realDeliveryTime;

    /**
     * 预计发货时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date estimatedDeliveryTime;

    /**
     * 0 正常 1已删除
     */
    private Integer deleted;

    /**
     * 更新人
     */
    private String updateBy;

    /**
     * 更新时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date updateTime;

    /**
     * 下架商品数量(一个商品ID算一个)
     */
    private Integer removeProductNum;

    /**
     * 采购价
     */
    private BigDecimal totalCostPrice;

    /**
     * 线下付款银行账号
     */
    private String offlinePayAccount;

    /**
     * 线下付款支行
     */
    private String offlinePayBank;

    /**
     * 线下付款时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date offlinePayTime;

    /**
     * 付款凭证
     */
    private String offlinePayImg;

    /**
     * 0 待提交凭证 1 已提交凭证 2 已完成
     */
    private Integer offlinePayStatus;

    /**
     * 商品种类(一个商品id算一个)
     */
    private Integer prodcutNum;

    /**
     * 结算时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date settlementTime;

    /**
     * 预支付时间(提交审核时间)
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date prepaymentTime;

    /**
     * 结算金额(分)
     */
    private BigDecimal settlementAmount;

    /**
     * 0 未结算 1可结算 2已结算
     */
    private Integer settlementStatus;

    /**
     * 子单数量
     */
    private Integer orderNum;

    /**
     * 用户手机
     */
    private String userTel;

    /**
     * 用户名称
     */
    private String userName;

    private List<OrderDTO> orders;

    private List<OrderParentMessageDTO> messages;

    /**
     * 小程序订单商品列表
     */
    private List<OrderProductsDTO> products;

    /**
     * 取消订单说明
     */
    private String cancelReason;

    /**
     * 用户角色名称
     */
    private String roleName;

    /**
     * 发货单图片,多个以逗号拼接
     */
    private String invoicePhoto;

    /**
     * 发货单备注
     */
    private String invoiceRemark;

    private static final long serialVersionUID = 1L;

}
